package com.huangsm.concurrence.blockingqueue;

import java.util.concurrent.BlockingQueue;
import java.util.concurrent.PriorityBlockingQueue;

/**
 * 具有优先级的阻塞队列
 * @author huang
 * @date 2019/2/14
 */
public class PriorityBlockingQueueExample {
    /**
     * priorityBlockingQueue 类实现了 BlockingQueue 接口。
     * PriorityBlockingQueue 是一个无界的并发队列。它使用了和类 java.util.PriorityQueue 一样的排序规则。你无法向这个队列中插入 null 值。
     * 所有插入到 PriorityBlockingQueue 的元素必须实现 java.lang.Comparable 接口。因此该队列中元素的排序就取决于你自己的 Comparable 实现。
     * 注意 PriorityBlockingQueue 对于具有相等优先级(compare() == 0)的元素并不强制任何特定行为。
     * 同时注意，如果你从一个 PriorityBlockingQueue 获得一个 Iterator 的话，该 Iterator 并不能保证它对元素的遍历是以优先级为序的。
     */
    public static void main(String[] args) throws Exception{

        BlockingQueue queue   = new PriorityBlockingQueue();

        //String implements java.lang.Comparable
        queue.put("Value");
        queue.put("Value1");


        System.out.println(queue.take());
    }
}
